error: ‘class QApplication’ has no member named ‘setMainWidget’

原文:http://hi.baidu.com/ajian1453/blog/item/411889df064f23c938012f3f.html


习惯了windows下的基于GUI的应用程序开发,突然想想linux下该如何开发一个图形应用程序呢?查了查资料,发现QT是个好东西,于是迫不及待的在ubuntu8.04下试了试。

首先呢, 先找到一个教程, 照着教程试试:

http://www.qiliang.net/qt/tutorial1-01.html

不得不说, 这个教程很不错, 讲解比较细致,也容易懂。

接着,开始自己敲代码:

$ mkdir HelloWorld

$ cd HelloWorld

$ vi HelloWorld.cpp

代码内容如下:

// HelloWorld.cpp

#include <qapplication.h>

#include <qpushbutton.h>

int main(int argc, char** argv)

{

    QApplication a(argc, argv);

    QPushButton hello("Hello World!", 0);

    hello.resize(300, 130);

    a.setMainWidget(&hello);

    hello.show();

    return a.exec();

}

代码什么意思我也不说了, 如果你熟悉windows下的图形界面开发, 你会发现这些代码非常容易懂, 而且上面的教程里面对每句代码有很好的解释。

代码敲完了, 开始该编译了吧:

$ qmake -project

令人沮丧的是, 居然不认识qmake,不过有提示:

The program 'qmake' can be found in the following packages:

* libqt4-dev

* qt3-dev-tools

看看上面的提示, 似乎libqt4-dev这个版本比较新呀, 于是作为首先的安装对象:

$ sudo apt-get install libqt4-dev

哇, 速度还真不错, 5分钟就搞定了

重新编译:

$ qmake -project

$ qmake

$ make

g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -I. -o HelloWorld.o HelloWorld.cpp

HelloWorld.cpp: In function ‘int main(int, char**)’:

HelloWorld.cpp:9: error: ‘class QApplication’ has no member named ‘setMainWidget’

make: *** [HelloWorld.o] Error 1

郁闷呀, 前面2步没问题, 又出问题了, 不过, 不要慌, 看看错误提示先:

HelloWorld.cpp:9: error: ‘class QApplication’ has no member named ‘setMainWidget’

这句似乎比较能说明问题了, 没有这个成员函数, 怎么办? google吧, g.cn回车, 查一查,终于找到问题所在了:

http://www.gidforums.com/t-13690.html

呵呵, 原来是版本的问题, setMainWidget是Qt3的,而在Qt4中,这个函数已经过时了,

于是,For an immediate fix, you can define QT3_SUPPORT:

//

// Define QT3_SUPPORT before including any qt headers

//

#define QT3_SUPPORT

#include <qapplication.h>

#include <qpushbutton.h>

好,加上

#define QT3_SUPPORT

然后重新编译, 哈哈, 成功编译, 发现HelloWorld目录下面多了一些文件, 其中有一个绿色的

HelloWorld, 我想这个应该就是可执行文件了吧, 先不管, 执行一把:

$ ./HelloWorld

哈哈, 爽, 终于出来了:



兴奋一下, 于是写成上文,关于QT编程进一步的知识, 完全可以照着上面的教程去实际操作一下。

下面这篇文章:

http://blog.chinaunix.net/u2/60529/showart_1111263.html

也是一篇入门文章, 看看演练一下也不错。

从上面的例子来看, 这种写法似乎很熟悉, MFC? 呵呵, 好像是的哟, 如果你对MFC很熟悉, 然后网上找一些教程以及查看一下QT的相关文档如:

http://doc.trolltech.com/4.1/classes.html

我想写一些一般的GUI应用程序应该是不成问题的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
//自定义日历可看上篇文章 QCalendarTimeEdit::QCalendarTimeEdit(QWidget *parent) : QLineEdit(parent) , m_calendarWidget(nullptr) , m_widget(nullptr) { m_minDateTime = QDateTime::currentDateTime(); { QTime maxtime; maxtime.setHMS(23, 59, 59); m_maxDateTime.setTime(maxtime); m_maxDateTime.setDate(QDate::currentDate().addDays(365)); } setContextMenuPolicy(Qt::NoContextMenu); } QCalendarTimeEdit::~QCalendarTimeEdit() { if (m_widget) { delete m_widget; m_widget = nullptr; } } void QCalendarTimeEdit::initControlcalendar() { m_widget = new BackPaintWidget(nullptr); m_widget->setObjectName("calendarFramWidget"); loadStyleSheet(m_widget, "CalendarWidget"); m_widget->setAttribute(Qt::WA_TranslucentBackground); m_widget->setWindowFlags(Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::SubWindow); QHBoxLayout* layout = new QHBoxLayout; layout->setMargin(8); layout->setSpacing(0); m_calendarWidget = new QCustomCalendarTimeWidget(m_widget); m_widget->setCalendarTimeWidget(m_calendarWidget); m_calendarWidget->setCalendarMinDate(m_minDateTime); m_calendarWidget->setCalendarMaxDate(m_maxDateTime); //m_calendarWidget->disconnect(SIGNAL(selectionChanged())); //m_calendarWidget->disconnect(SIGNAL(clicked(QDate))); layout->addWidget(m_calendarWidget); m_widget->setLayout(layout); connect(m_calendarWidget, &QCustomCalendarTimeWidget;::signalSetCalendarTime, [this](const QDateTime& date){ setText(date.toString("yyyy-MM-dd hh:mm:ss")); hideCalendarTimeWidget(); }); connect(m_calendarWidget, &QCustomCalendarTimeWidget;::signalClearDateTime, [this](){ clear(); hideCalendarTimeWidget(); }); hideCalendarTimeWidget(); } void QCalendarTimeEdit::setCalendarMinDate(const QDateTime &datetime;) { m_minDateTime = datetime; if (m_calendarWidget) { m_calendarWidget->setCalendarMinDate(m_minDateTime); } } void QCalendarTimeEdit::setCalendarMaxDate(const QDateTime &datetime;) { m_maxDateTime = datetime; if (m_calendarWidget) { m_calendarWidget->setCalendarMaxDate(m_maxDateTime); } } void QCalendarTimeEdit::popCalendarTimeWidget() { if (m_calendarWidget == nullptr) { initControlcalendar(); } QRect rect = qApp->desktop()->availableGeometry(0); QPoint gloadPos = mapToGlobal(QPoint(-8, this->height())); if (gloadPos.y() + m_calendarWidget->height() > rect.height()) { int y = gloadPos.y() - this->height() - m_calendarWidget->height(); gloadPos.setY(y); } m_widget->move(gloadPos); m_widget->show(); } void QCalendarTimeEdit::hideCalendarTimeWidget() { m_widget->hide(); } void QCalendarTimeEdit::mousePressEvent(QMouseEvent *event) { __super::mousePressEvent(event); if (event->button() == Qt::LeftButton) { popCalendarTimeWidget(); } } void QCalendarTimeEdit::keyPressEvent(QKeyEvent *event) { Q_UNUSED(event); }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值