• 7652阅读
  • 18回复

Designer做ui生成的布局文件,里面的部件不能直接用么…… [复制链接]

上一主题 下一主题
离线mewjerry
 
只看楼主 倒序阅读 楼主  发表于: 2010-01-18
-。-生成一个GUI工程,用designer改了UI,然后在mainwindow.h的public里写了:

  1. void changeButtonTitle(QPushButton &target,QString &targetString);


在main.cpp里写了:
  1. QObject::connect(pushButton_2, SIGNAL(clicked()), MainWindow, SLOT(changeButtonTitle(&pushButton_2,&L"正在连接")));


编译会提示pushButton_2没有声明。但是那个是UI里的东西-。-而且写了#include "ui_mainwindow.h"也没有用……

于是请教下应当怎样写?

我看了一些示例都是在main.cpp里直接动态生成按钮什么的,那么像这样直接用UI引入的按钮难道还得再声明一次?
离线benbenmajia

只看该作者 1楼 发表于: 2010-01-18
错误贴出来看看
安然.....
离线mewjerry
只看该作者 2楼 发表于: 2010-01-18
D:/CPP/BF/TestAPP/main.cpp:8: error: 'pushButton_2' was not declared in this scope


D:/CPP/BF/TestAPP/main.cpp:8: error: expected primary-expression before ',' token
[ 此帖被mewjerry在2010-01-18 10:22重新编辑 ]
离线mewjerry
只看该作者 3楼 发表于: 2010-01-18
不HD上顶一下
离线benbenmajia

只看该作者 4楼 发表于: 2010-01-18
在connect中使用的是QPushButton *类型,可能是数据类型不对,你直接用的对象
安然.....
离线xinqingfly

只看该作者 5楼 发表于: 2010-01-18
应该是m_ui->pushButton_2吧
菜鸟也是鸟
离线mewjerry
只看该作者 6楼 发表于: 2010-01-18
尝试了2位的办法,不过没有改善,我把所有代码都贴上来算了……

ui_mainwindow.h:
  1. /********************************************************************************
  2. ** Form generated from reading UI file 'mainwindow.ui'
  3. **
  4. ** Created: Sun Jan 17 22:36:50 2010
  5. **      by: Qt User Interface Compiler version 4.6.0
  6. **
  7. ** WARNING! All changes made in this file will be lost when recompiling UI file!
  8. ********************************************************************************/
  9. #ifndef UI_MAINWINDOW_H
  10. #define UI_MAINWINDOW_H
  11. #include <QtCore/QVariant>
  12. #include <QtGui/QAction>
  13. #include <QtGui/QApplication>
  14. #include <QtGui/QButtonGroup>
  15. #include <QtGui/QGraphicsView>
  16. #include <QtGui/QGroupBox>
  17. #include <QtGui/QHeaderView>
  18. #include <QtGui/QLineEdit>
  19. #include <QtGui/QMainWindow>
  20. #include <QtGui/QMenu>
  21. #include <QtGui/QMenuBar>
  22. #include <QtGui/QPushButton>
  23. #include <QtGui/QStatusBar>
  24. #include <QtGui/QTextBrowser>
  25. #include <QtGui/QWidget>
  26. QT_BEGIN_NAMESPACE
  27. class Ui_MainWindow
  28. {
  29. public:
  30.     QAction *action;
  31.     QWidget *centralwidget;
  32.     QGroupBox *groupBox;
  33.     QPushButton *pushButton_2;
  34.     QPushButton *pushButton;
  35.     QLineEdit *lineEdit_4;
  36.     QLineEdit *lineEdit;
  37.     QLineEdit *lineEdit_3;
  38.     QLineEdit *lineEdit_2;
  39.     QGraphicsView *graphicsView;
  40.     QGroupBox *groupBox_2;
  41.     QPushButton *pushButton_3;
  42.     QPushButton *pushButton_5;
  43.     QPushButton *pushButton_4;
  44.     QPushButton *pushButton_6;
  45.     QGroupBox *groupBox_3;
  46.     QTextBrowser *textBrowser;
  47.     QStatusBar *statusbar;
  48.     QMenuBar *menuBar;
  49.     QMenu *menu;
  50.     void setupUi(QMainWindow *MainWindow)
  51.     {
  52.         if (MainWindow->objectName().isEmpty())
  53.             MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
  54.         MainWindow->setEnabled(true);
  55.         MainWindow->resize(477, 441);
  56.         QSizePolicy sizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
  57.         sizePolicy.setHorizontalStretch(0);
  58.         sizePolicy.setVerticalStretch(0);
  59.         sizePolicy.setHeightForWidth(MainWindow->sizePolicy().hasHeightForWidth());
  60.         MainWindow->setSizePolicy(sizePolicy);
  61.         MainWindow->setMaximumSize(QSize(477, 441));
  62.         MainWindow->setCursor(QCursor(Qt::CrossCursor));
  63.         MainWindow->setAcceptDrops(false);
  64.         action = new QAction(MainWindow);
  65.         action->setObjectName(QString::fromUtf8("action"));
  66.         centralwidget = new QWidget(MainWindow);
  67.         centralwidget->setObjectName(QString::fromUtf8("centralwidget"));
  68.         groupBox = new QGroupBox(centralwidget);
  69.         groupBox->setObjectName(QString::fromUtf8("groupBox"));
  70.         groupBox->setGeometry(QRect(10, 10, 231, 101));
  71.         pushButton_2 = new QPushButton(groupBox);
  72.         pushButton_2->setObjectName(QString::fromUtf8("pushButton_2"));
  73.         pushButton_2->setGeometry(QRect(30, 60, 75, 23));
  74.         pushButton = new QPushButton(groupBox);
  75.         pushButton->setObjectName(QString::fromUtf8("pushButton"));
  76.         pushButton->setGeometry(QRect(120, 60, 75, 23));
  77.         lineEdit_4 = new QLineEdit(groupBox);
  78.         lineEdit_4->setObjectName(QString::fromUtf8("lineEdit_4"));
  79.         lineEdit_4->setGeometry(QRect(170, 30, 41, 20));
  80.         lineEdit_4->setCursor(QCursor(Qt::CrossCursor));
  81.         lineEdit_4->setMaxLength(254);
  82.         lineEdit = new QLineEdit(groupBox);
  83.         lineEdit->setObjectName(QString::fromUtf8("lineEdit"));
  84.         lineEdit->setGeometry(QRect(20, 30, 41, 20));
  85.         lineEdit->setCursor(QCursor(Qt::CrossCursor));
  86.         lineEdit->setMaxLength(254);
  87.         lineEdit_3 = new QLineEdit(groupBox);
  88.         lineEdit_3->setObjectName(QString::fromUtf8("lineEdit_3"));
  89.         lineEdit_3->setGeometry(QRect(120, 30, 41, 20));
  90.         lineEdit_3->setCursor(QCursor(Qt::CrossCursor));
  91.         lineEdit_3->setMaxLength(254);
  92.         lineEdit_2 = new QLineEdit(groupBox);
  93.         lineEdit_2->setObjectName(QString::fromUtf8("lineEdit_2"));
  94.         lineEdit_2->setGeometry(QRect(70, 30, 41, 20));
  95.         lineEdit_2->setCursor(QCursor(Qt::CrossCursor));
  96.         lineEdit_2->setMaxLength(254);
  97.         graphicsView = new QGraphicsView(centralwidget);
  98.         graphicsView->setObjectName(QString::fromUtf8("graphicsView"));
  99.         graphicsView->setGeometry(QRect(10, 120, 231, 181));
  100.         graphicsView->viewport()->setProperty("cursor", QVariant(QCursor(Qt::CrossCursor)));
  101.         groupBox_2 = new QGroupBox(centralwidget);
  102.         groupBox_2->setObjectName(QString::fromUtf8("groupBox_2"));
  103.         groupBox_2->setGeometry(QRect(10, 309, 231, 101));
  104.         pushButton_3 = new QPushButton(groupBox_2);
  105.         pushButton_3->setObjectName(QString::fromUtf8("pushButton_3"));
  106.         pushButton_3->setGeometry(QRect(20, 20, 81, 31));
  107.         pushButton_5 = new QPushButton(groupBox_2);
  108.         pushButton_5->setObjectName(QString::fromUtf8("pushButton_5"));
  109.         pushButton_5->setGeometry(QRect(20, 60, 81, 31));
  110.         pushButton_4 = new QPushButton(groupBox_2);
  111.         pushButton_4->setObjectName(QString::fromUtf8("pushButton_4"));
  112.         pushButton_4->setGeometry(QRect(130, 20, 81, 31));
  113.         pushButton_6 = new QPushButton(groupBox_2);
  114.         pushButton_6->setObjectName(QString::fromUtf8("pushButton_6"));
  115.         pushButton_6->setGeometry(QRect(130, 60, 81, 31));
  116.         groupBox_3 = new QGroupBox(centralwidget);
  117.         groupBox_3->setObjectName(QString::fromUtf8("groupBox_3"));
  118.         groupBox_3->setGeometry(QRect(250, 10, 221, 401));
  119.         textBrowser = new QTextBrowser(groupBox_3);
  120.         textBrowser->setObjectName(QString::fromUtf8("textBrowser"));
  121.         textBrowser->setGeometry(QRect(10, 20, 201, 371));
  122.         textBrowser->viewport()->setProperty("cursor", QVariant(QCursor(Qt::CrossCursor)));
  123.         MainWindow->setCentralWidget(centralwidget);
  124.         statusbar = new QStatusBar(MainWindow);
  125.         statusbar->setObjectName(QString::fromUtf8("statusbar"));
  126.         MainWindow->setStatusBar(statusbar);
  127.         menuBar = new QMenuBar(MainWindow);
  128.         menuBar->setObjectName(QString::fromUtf8("menuBar"));
  129.         menuBar->setGeometry(QRect(0, 0, 477, 19));
  130.         menu = new QMenu(menuBar);
  131.         menu->setObjectName(QString::fromUtf8("menu"));
  132.         MainWindow->setMenuBar(menuBar);
  133.         QWidget::setTabOrder(lineEdit, lineEdit_2);
  134.         QWidget::setTabOrder(lineEdit_2, lineEdit_3);
  135.         QWidget::setTabOrder(lineEdit_3, lineEdit_4);
  136.         QWidget::setTabOrder(lineEdit_4, pushButton_2);
  137.         QWidget::setTabOrder(pushButton_2, pushButton_3);
  138.         QWidget::setTabOrder(pushButton_3, pushButton_4);
  139.         QWidget::setTabOrder(pushButton_4, pushButton_5);
  140.         QWidget::setTabOrder(pushButton_5, pushButton_6);
  141.         QWidget::setTabOrder(pushButton_6, textBrowser);
  142.         QWidget::setTabOrder(textBrowser, graphicsView);
  143.         menuBar->addAction(menu->menuAction());
  144.         menu->addAction(action);
  145.         retranslateUi(MainWindow);
  146.         QObject::connect(action, SIGNAL(activated()), MainWindow, SLOT(close()));
  147.         QObject::connect(pushButton_2, SIGNAL(clicked()), pushButton_2, SLOT(lower()));
  148.         QObject::connect(pushButton, SIGNAL(clicked()), pushButton, SLOT(lower()));
  149.         QMetaObject::connectSlotsByName(MainWindow);
  150.     } // setupUi
  151.     void retranslateUi(QMainWindow *MainWindow)
  152.     {
  153.         MainWindow->setWindowTitle(QApplication::translate("MainWindow", "MainWindow", 0, QApplication::UnicodeUTF8));
  154.         action->setText(QApplication::translate("MainWindow", "\351\200\200\345\207\272", 0, QApplication::UnicodeUTF8));
  155.         groupBox->setTitle(QApplication::translate("MainWindow", "\346\210\221\350\246\201\350\277\236\346\216\245\357\274\201", 0, QApplication::UnicodeUTF8));
  156.         pushButton_2->setText(QApplication::translate("MainWindow", "\350\277\236\346\216\245", 0, QApplication::UnicodeUTF8));
  157.         pushButton->setText(QApplication::translate("MainWindow", "\347\255\211\345\276\205", 0, QApplication::UnicodeUTF8));
  158.         groupBox_2->setTitle(QApplication::translate("MainWindow", "\345\207\272\346\213\233\345\220\247\357\274\201", 0, QApplication::UnicodeUTF8));
  159.         pushButton_3->setText(QApplication::translate("MainWindow", "PushButton", 0, QApplication::UnicodeUTF8));
  160.         pushButton_5->setText(QApplication::translate("MainWindow", "PushButton", 0, QApplication::UnicodeUTF8));
  161.         pushButton_4->setText(QApplication::translate("MainWindow", "PushButton", 0, QApplication::UnicodeUTF8));
  162.         pushButton_6->setText(QApplication::translate("MainWindow", "PushButton", 0, QApplication::UnicodeUTF8));
  163.         groupBox_3->setTitle(QApplication::translate("MainWindow", "\346\210\230\346\212\245\357\275\236", 0, QApplication::UnicodeUTF8));
  164.         menu->setTitle(QApplication::translate("MainWindow", "\347\202\271\346\210\221...", 0, QApplication::UnicodeUTF8));
  165.     } // retranslateUi
  166. };
  167. namespace Ui {
  168.     class MainWindow: public Ui_MainWindow {};
  169. } // namespace Ui
  170. QT_END_NAMESPACE
  171. #endif // UI_MAINWINDOW_H


mainwindow.h:
  1. #ifndef MAINWINDOW_H
  2. #define MAINWINDOW_H
  3. #include <QMainWindow>
  4. #include "ui_mainwindow.h"
  5. namespace Ui {
  6.     class MainWindow;
  7. }
  8. class MainWindow : public QMainWindow {
  9.     Q_OBJECT
  10. public:
  11.     MainWindow(QWidget *parent = 0);
  12.     ~MainWindow();
  13.      bool makeConnact(int IP1,int IP2,int IP3,int IP4);
  14.      bool makeDisConnact();
  15.      void changeButtonTitle(QPushButton &target,QString &targetString);
  16. protected:
  17.     void changeEvent(QEvent *e);
  18. private:
  19.     Ui::MainWindow *ui;
  20. };
  21. #endif // MAINWINDOW_H


mainwindow.cpp:
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"//这我专门加上的……
  3. MainWindow::MainWindow(QWidget *parent) :
  4.     QMainWindow(parent),
  5.     ui(new Ui::MainWindow)
  6. {
  7.     ui->setupUi(this);
  8. }
  9. MainWindow::~MainWindow()
  10. {
  11.     delete ui;
  12. }
  13. void MainWindow::changeEvent(QEvent *e)
  14. {
  15.     QMainWindow::changeEvent(e);
  16.     switch (e->type()) {
  17.     case QEvent::LanguageChange:
  18.         ui->retranslateUi(this);
  19.         break;
  20.     default:
  21.         break;
  22.     }
  23. }
  24. bool MainWindow::makeConnact(int IP1,int IP2,int IP3,int IP4)
  25. {
  26.     return 0;
  27. }
  28. bool MainWindow::makeDisConnact()
  29. {
  30.     return 0;
  31. }
  32. void MainWindow::changeButtonTitle(QPushButton &target,QString &targetString)
  33. {
  34. }



main.cpp:
  1. #include <QtGui/QApplication>
  2. #include "mainwindow.cpp"
  3. #include "ui_mainwindow.h"
  4. int main(int argc, char *argv[])
  5. {
  6.     QApplication a(argc, argv);
  7.     QObject::connect(pushButton_2, SIGNAL(clicked()), MainWindow, SLOT(changeButtonTitle(&pushButton_2,&L"正在连接")));//这里的两个即便是改了,也会报错的
  8.     MainWindow w;
  9.     w.show();
  10.     return a.exec();
  11. }
离线benbenmajia

只看该作者 7楼 发表于: 2010-01-18
KEKEKEKE,如果你的界面不是很复杂的话建议自己代码实现,方便也容易管理...这么长都不敢看..
安然.....
离线benbenmajia

只看该作者 8楼 发表于: 2010-01-18
你把connect放到窗口声明的下面去...
安然.....
离线xinqingfly

只看该作者 9楼 发表于: 2010-01-18
MainWindow都还没有创建你怎么能去连接它的槽呢,再说pushButton_2是Ui_MainWindow中的,你想点击时改变按钮的文本可以直接放在Ui_MainWindow中处理啊,先理理你的逻辑
菜鸟也是鸟
离线mewjerry
只看该作者 10楼 发表于: 2010-01-18
我就是把它挪到MainWindow w;后面也一样,忘了之前为什么写在前面了- -

关键是-。-这个虽然是改变UI的函数,可是后面还有要在按钮按下之后触发的其它非UI函数,难道都在UI里面写不成……
离线benbenmajia

只看该作者 11楼 发表于: 2010-01-18
你先自己彻底弄清楚creator生成UI的用法,还有里面的逻辑条理,再说其他的,看看demo是怎么说的
安然.....
离线yangfanxing
只看该作者 12楼 发表于: 2010-01-18
PHPWind好恶心。。。不想看这种界面。。。
离线xinqingfly

只看该作者 13楼 发表于: 2010-01-18
你先搞清楚你想实现啥功能,是你要点击按钮的时候改变文本吗,这个里面很多参数都是错误的QObject::connect(pushButton_2, SIGNAL(clicked()), MainWindow, SLOT(changeButtonTitle(&pushButton_2,&L"正在连接")));//

#include <QtGui/QApplication>
#include "mainwindow.cpp"
#include "ui_mainwindow.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
MainWindow w;
    QObject::connect(w.ui->pushButton_2, SIGNAL(clicked()), &w, SLOT(changeButtonTitle(QPushButton &,QString &)));//这里的两个即便是改了,也会报错的
    
    w.show();



    return a.exec();
}
然后void MainWindow::changeButtonTitle(QPushButton &target,QString &targetString)
{

target.setText(targeString);
}

这样岂不是看起来很乱
菜鸟也是鸟
离线xinqingfly

只看该作者 14楼 发表于: 2010-01-18
忘记看了,你的信号和槽也不匹配,不能这样连接
菜鸟也是鸟
离线benbenmajia

只看该作者 15楼 发表于: 2010-01-18
....强烈建议你自己代码实现界面
安然.....
离线mewjerry
只看该作者 16楼 发表于: 2010-01-18
-。-折腾了一中午,终于差不离搞清楚UI怎么回事了;
话说本来不知道还有个setText,还以为要自己实现呢- -
离线benbenmajia

只看该作者 17楼 发表于: 2010-01-18
需要用哪个类的时候总要看看都有什么接口的吧.
安然.....
离线mewjerry
只看该作者 18楼 发表于: 2010-01-18
只看了QpushButton,没看他老爹- -
以前用BCB的,被惯坏了不好意思- -
快速回复
限100 字节
 
上一个 下一个