这似乎是一项简单的任务,但我无法弄清楚我将如何做到这一点.我在Qt Creator中设计了两个窗口,其中一个窗口是在我的主窗口中按下按钮时打开的.这是我试图用来打开它的代码:
void MainWindow::on_generateDomain_clicked()
{
DomainGeneration dg;
dg.show();
}
Run Code Online (Sandbox Code Playgroud)
DomainGeneration是我窗口类的名称.此标题和源代码未从为我生成的默认Qt Creator中更改.难道我做错了什么?我没有收到任何错误,按下按钮时窗口没有打开.
在std:vector上使用erase()函数时,我遇到了一个奇怪的问题.我使用以下代码:
int count = 0;
for (int itr=0; itr<b.size(); ++itr) {
if (b[count].notEmpty = false) {
b.erase(b.begin()+count);
--count;
}
++count;
}
Run Code Online (Sandbox Code Playgroud)
但是,由于某些原因,实际上没有任何元素从b中删除.b在其他地方宣布如下:
vector<block_data> b;
Run Code Online (Sandbox Code Playgroud)
其中block_data是一个结构,并包含布尔值notEmpty.某些b的元素在代码中较早地正确分配了notEmpty = false,因此我不确定它们为什么不被删除.是语法错误还是其他错误?
我是Qt Creator编程的新手,我很难找到合适的资源来帮助一个绝对的初学者开始.我想创建一个简单的窗口,允许用户将字符串输入到QLineEdit框中,然后从下拉框(QComboBox)中选择一个值.然后,他们单击一个按钮,该按钮从这些源获取输入,在窗口中显示输入,并将其写入文件.
我完全不知道如何从这两个来源获取输入并在按下按钮时收集它,或者如何让它在屏幕上显示.我觉得这样一个简单的练习将涵盖如何很好地使用Qt的基础知识.如果有人可以给我一些简单的示例代码,或者将我链接到ABSOLUTE初学者的任何类型的教程,这将帮助我完成这个特别的任务,这将是伟大的!
尝试在运行时向QWidget添加按钮时,我遇到了一个奇怪的问题.我有一个带有QTabWidget的窗口,它有2个选项卡.当我按下窗口上的按钮时,它会在第一个选项卡上生成一系列复选框.
问题是,当我打开第一个标签时,按下按钮没有任何反应,但如果我打开第二个标签,按下按钮,然后返回第一个标签,复选框显示正确.这是创建复选框的代码示例:
for(int i = 0; i < x_dim; ++i){
for(int j = 0; j < y_dim; ++j){
checkBoxVector.append(new QCheckBox( ui->dim1 ));
checkBoxVector.last()->setGeometry(i * 20, j * 20, 20, 20);
}
}
Run Code Online (Sandbox Code Playgroud)
我必须在QTabWidget中启用某种属性才能使其正常工作吗?
就像问题所说的那样,我试图将多维数组传递给函数,将其打印到工程项目的文件中.输入数据的格式不能更改,所以请不要建议我只是将其输入为不同的数据类型.
这个特殊的函数预期一个二维数组(虽然我有其他三维后的数据),直到运行时才知道数组的大小.我知道我必须使用指针分别指向数组的每一行,但我不知道将它传递给函数的语法是什么.在下面的代码中,有问题的数组是'block'.主要功能只是我尝试使其工作的一个小测试示例:
#include<fstream>
using namespace std;
void of_write_blocks(string filename, string block_type[], int **block,
int grid[][3], string grade_type[], int grade[][3], int n_blocks, int m[])
{
ofstream file_out(filename.c_str(),ios::app);
file_out<<"\nblocks\n(\n";
for(int i=0;i<n_blocks;++i) {
file_out<<" "<<block_type[i]<<" ( ";
for(int j=0;j<m[i];++j)
file_out<<block[i][j]<<" ";
file_out<<") ( ";
file_out<<grid[i][0]<<' '<<grid[i][1]<<' '<<grid[i][2]<<" ) ";
file_out<<grade_type[i]<<" ( ";
file_out<<grade[i][0]<<' '<<grade[i][1]<<' '<<grade[i][2]<<" )\n";
}
file_out<<");\n";
}
//testing example:
int main()
{
int block[6][9];
for(int i=0; i<6;++i)
for(int j=0; i<9;++j)
block[i][j] = i*j;
int grid[6][3];
for(int i=0; i<6;++i)
for(int j=0; i<3;++j) …Run Code Online (Sandbox Code Playgroud) 在我当前的项目中,我有一个QCheckBoxes数组,我在运行时根据用户的维度创建.每次用户单击"生成"按钮时,都会收集他们输入的尺寸,并创建一个QCheckBoxes数组.它在以下代码中完成:
void MainWindow::on_generateBoxes_clicked()
{
int x_dim = ui->xDim->value();
int y_dim = ui->yDim->value();
int z_dim = ui->zDim->value();
for(int i = 0; i < x_dim; ++i){
for(int j = 0; j < y_dim; ++j){
checkBoxVector.append(new QCheckBox( ui->dim1 ));
checkBoxVector.last()->setGeometry(i * 20, j * 20, 20, 20);
}
}
}
Run Code Online (Sandbox Code Playgroud)
checkBoxVector是在另一个源文件中声明的全局指针数组:
QVector<QCheckBox*> checkBoxVector;
Run Code Online (Sandbox Code Playgroud)
我的问题是,如何通过checkBoxVector删除每个QCheckBox?由于数组的先前维度是局部变量,一旦函数返回就会丢失,当重新调用它时,我怎么知道要删除多少个元素?
如果用户要按两次"生成"按钮,则会有重叠的QCheckBox,所以每次调用该函数时我都需要擦除它们.(另外,没有人想要内存泄漏!)
我使用以下代码创建了一个双精度数组:
double *points = new double[(ii+1)*(jj+1)*(kk+1)*3];
Run Code Online (Sandbox Code Playgroud)
我意识到为了删除数组,我所要做的就是:
delete[] points;
Run Code Online (Sandbox Code Playgroud)
然而; 数组是在一个函数(称为create_points)中创建的,该函数传递第一个元素的地址,如下所示:
return &points[0];
Run Code Online (Sandbox Code Playgroud)
调用此函数的代码然后遍历地址:
double *address = create_points(x_dim,y_dim,z_dim);
for(int k=0; k<x_dim+1; ++k)
for(int j=0; j<y_dim+1; ++j)
for(int i=0; i<z_dim+1; ++i) {
v[p_count].x = *address;
++address;
v[p_count].y = *address;
++address;
v[p_count].z = *address;
++address;
++p_count;
}
Run Code Online (Sandbox Code Playgroud)
现在我的问题是,如何正确删除地址用于访问的双打数组?我可以简单地去delete[] address,或者我必须以其他方式这样做吗?
希望是一个非常快速的问题.在我的一个函数中,我想在运行时为QTabWidget生成'x'个选项卡(用户提供'x').我知道我必须为QTabWidget使用addTab函数(如果我错了就纠正我),但我不确定我应该如何使用它.qt文档对我来说不清楚.
我尝试了以下命令只添加一个选项卡作为测试,但它导致程序崩溃:
ui->checkBoxTabArea->addTab(ui->checkBoxTabArea,"tab2");
Run Code Online (Sandbox Code Playgroud)
既然我明显错了,有人可以帮我使用这个功能吗?我觉得我只是将错误的参数传递给addTab.
编辑:checkBoxTabArea在程序启动时已经有1个选项卡(如果这是任何帮助).