我对一些Qt架构感到困惑。
当我在Qt Designer中设计GUI时,很容易将元素放在布局(Grid,Box,无论如何)中,并创建一个插槽来连接元素(例如按钮)和一些特定的动作.cpp文件。
在相关的.cpp文件中,即使从类中的不同函数,我也可以通过ui->element->do_something
访问这些元素;
当不使用设计器时,而是在.cpp中创建整个GUI内容(添加元素对象,将这些对象添加到布局,创建插槽等等)。我无法访问我的...像ui->Button->do_something
这样的按钮。
我被ui->Layout->functions from layout
困住,无法访问单个元素及其功能,如ui->textEdit->text();
或类似ui->Layout->textEdit->text()
来自该类中的其他功能。
那么如何访问这些元素?
我担心我在这里或其他地方错过了Qt架构的重点。
答案 0 :(得分:2)
当你使用设计师时," Ui"使用布局代码自动生成文件,然后通过Ui :: Mainwindow访问,您可以在QMainWindow类中看到自动生成的文件。
您可以在默认构造函数中看到:
QMainWindow(parent), ui(new Ui::MainWindow)
因此,gui文件中定义的每个组件都可以通过ui :: nameofyourcomponent访问。
如果您手动编写代码,则不会有任何接入点"对于您的元素,所以您必须完全像代码和类的其他部分一样构建层次结构。
编辑:回答他的评论的一小部分。
在你的标题中你可以声明:
private slots:
void doSomething();
private:
QPushButton* mybutton;
QLabel* mylabel;
你在Cpp中的:
connect(myButton, SIGNAL(clicked()), this, SLOT(doSomething) );
MyClass::doSomething()
{
mylabel->setText("hello button!");
}
当然,您可以通过信号和插槽直接使用连接链接。
答案 1 :(得分:1)
设计者创建的所有对象都是ui
对象的公共成员,这就是您可以使用它们的原因。为了能够使用手动创建的对象,您必须在某处存储指针或引用。