Qt Creator - 设计师的GUI与代码的GUI - 如何访问元素的功能

时间:2018-02-16 06:46:51

标签: c++ qt user-interface qt-designer

我对一些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架构的重点。

2 个答案:

答案 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对象的公共成员,这就是您可以使用它们的原因。为了能够使用手动创建的对象,您必须在某处存储指针或引用。