【发布时间】:2015-07-04 15:31:54
【问题描述】:
我有一个 MainWindow 类,其中有一个 QStackWidget。 在其中我还有另外 3 个小部件,每个小部件都是我自己从 QWidget 派生的自定义类。
在其中一个小部件中,我有一个按钮。
当我使用 QT Creator 并按下按钮上的 Go to slot.. 时,它会在 MainWindow 类中创建一个 on_button_clicked 事件。
如何更改它以在我的自定义类中包含事件?
更新: 我可以看到这些按钮位于 MainWindow 中。这是自动生成的,所以我不知道如何移动它。
代码: 主窗口.cpp:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_2_clicked()
{
QMessageBox::information(this, "Button 2 clicked!", "Click");
}
主窗口.ui
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>668</width>
<height>630</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralWidget">
<widget class="QStackedWidget" name="stackedWidget">
<property name="geometry">
<rect>
<x>10</x>
<y>10</y>
<width>531</width>
<height>391</height>
</rect>
</property>
<property name="currentIndex">
<number>1</number>
</property>
<widget class="Stack1" name="page">
<widget class="QPushButton" name="pushButton">
<property name="geometry">
<rect>
<x>140</x>
<y>110</y>
<width>321</width>
<height>121</height>
</rect>
</property>
<property name="text">
<string>Button on Stack1</string>
</property>
</widget>
</widget>
<widget class="Stack2" name="page_2">
<widget class="QPushButton" name="pushButton_2">
<property name="geometry">
<rect>
<x>110</x>
<y>140</y>
<width>371</width>
<height>161</height>
</rect>
</property>
<property name="text">
<string>Button on stack2</string>
</property>
</widget>
</widget>
</widget>
</widget>
<widget class="QMenuBar" name="menuBar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>668</width>
<height>25</height>
</rect>
</property>
</widget>
<widget class="QToolBar" name="mainToolBar">
<attribute name="toolBarArea">
<enum>TopToolBarArea</enum>
</attribute>
<attribute name="toolBarBreak">
<bool>false</bool>
</attribute>
</widget>
<widget class="QStatusBar" name="statusBar"/>
</widget>
<layoutdefault spacing="6" margin="11"/>
<customwidgets>
<customwidget>
<class>Stack1</class>
<extends>QWidget</extends>
<header>stack1.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>Stack2</class>
<extends>QWidget</extends>
<header>stack2.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>
我希望按钮回调在我的自定义类 stack2.cpp 中
#include "stack2.h"
Stack2::Stack2(QWidget *parent) : QWidget(parent)
{
}
Stack2::~Stack2()
{
}
【问题讨论】:
-
您可以将创建的插槽移动到您的班级。只要小部件有一个名为
button的子组件,该插槽就可以工作。由于某些原因,Qt Designer 有时会在奇怪的地方放置新的插槽。你在对应表单类的编辑器中使用“go to slot”吗? -
我尝试手动移动该功能,但它仍然不起作用。此外,我创建了 2 个按钮。一个在主页上的插槽,第二个在stackedwidget中的插槽,只有主页上的一个在工作。
-
我更新了问题
-
您正确地进行了促销,但您不应在主窗口表单中填写促销小部件的内容(即在其中放置按钮)。相反,将堆栈页面类创建为设计器表单类(就像
MainWindow但基于QWidget)并使用单独的表单编辑器将内容放入其中。或者,您可以在其构造函数中手动添加布局和按钮以堆叠页面。 -
太棒了!现在明白了。非常感谢。
标签: qt