• 6358阅读
  • 4回复

控制状态栏显示的疑问 [复制链接]

上一主题 下一主题
离线snowdream
 
只看楼主 倒序阅读 楼主  发表于: 2009-07-24
默认是打开状态栏的。
但是无法控制状态栏的显示和隐藏,大家看看问题出在哪里?


checkable.h
  1. #ifndef CHECKABLE_H
  2. #define CHECKABLE_H
  3. #include <QMainWindow>
  4. class Checkable : public QMainWindow
  5. {
  6.   public:
  7.     Checkable(QWidget *parent = 0);
  8.   private slots:
  9.    void toggleStatusbar(QAction *);
  10. };
  11. #endif


checkable.cpp
  1. #include "checkable.h"
  2. #include <QMenu>
  3. #include <QMenuBar>
  4. #include <QStatusBar>
  5. #include <QApplication>
  6. Checkable::Checkable(QWidget *parent)
  7.     : QMainWindow(parent)
  8. {
  9.   QAction *viewst = new QAction("&View statusbar", this);
  10.   viewst->setCheckable(true);
  11.   viewst->setChecked(true);
  12.   viewst->setStatusTip("View statusbar");
  13.   QMenu *file;
  14.   file = menuBar()->addMenu("&File");
  15.   file->addAction(viewst);
  16.   statusBar();
  17.   connect(viewst, SIGNAL(triggered()), this, SLOT(toggleStatusbar(viewst)));
  18. }
  19. void Checkable::toggleStatusbar(QAction *viewst)
  20. {
  21.   if (viewst->isChecked())
  22.     statusBar()->show();
  23.   else
  24.     statusBar()->hide();
  25. }


main.cpp
  1. #include "checkable.h"
  2. #include <QDesktopWidget>
  3. #include <QApplication>
  4. int main(int argc, char *argv[])
  5. {
  6.   QApplication app(argc, argv);
  7.   Checkable window;
  8.   window.setWindowTitle("Checkable menu");
  9.   window.show();
  10.   return app.exec();
  11. }
QQ:273247606
希望与大家一起交流QT~
离线sentimental
只看该作者 1楼 发表于: 2009-07-24
不知道你这种传递信号的方式可不可行 你这样改下看看



#include "checkable.h"
#include <QMenu>
#include <QMenuBar>
#include <QStatusBar>
#include <QApplication>

Checkable::Checkable(QWidget *parent)
    : QMainWindow(parent)
{
  QAction *viewst = new QAction("&View statusbar", this);
  viewst->setCheckable(true);
  viewst->setChecked(true);
  viewst->setStatusTip("View statusbar");
  QMenu *file;
  file = menuBar()->addMenu("&File");
  file->addAction(viewst);
  statusBar();
  connect(viewst, SIGNAL(triggered(bool)), this, SLOT(toggleStatusbar(bool)));
}

void Checkable::toggleStatusbar(bool bFlag)
{
    bFlag ? statusBar()->show() : statusBar()->hide();
}
离线snowdream
只看该作者 2楼 发表于: 2009-07-24
修改了下,还是不行,请问为啥?

checkable.h
  1. #ifndef CHECKABLE_H
  2. #define CHECKABLE_H
  3. #include <QMainWindow>
  4. class Checkable : public QMainWindow
  5. {
  6.   public:
  7.     Checkable(QWidget *parent = 0);
  8.   private slots:
  9. void toggleStatusbar(bool);
  10.   private:
  11.    bool bFlag;
  12. };
  13. #endif



checkable.cpp
  1. #include "checkable.h"
  2. #include <QMenu>
  3. #include <QMenuBar>
  4. #include <QStatusBar>
  5. #include <QApplication>
  6. Checkable::Checkable(QWidget *parent)
  7.     : QMainWindow(parent)
  8. {
  9.   QAction *viewst = new QAction("&View statusbar", this);
  10.   viewst->setCheckable(true);
  11.   viewst->setChecked(true);
  12.   viewst->setStatusTip("View statusbar");
  13.   QMenu *file;
  14.   file = menuBar()->addMenu("&File");
  15.   file->addAction(viewst);
  16.   statusBar();
  17.   connect(viewst, SIGNAL(triggered(bool)), this, SLOT(toggleStatusbar(bool)));
  18. }
  19. void Checkable::toggleStatusbar(bool bFlag)
  20. {
  21.   if (bFlag)
  22.     statusBar()->show();
  23.   else
  24.     statusBar()->hide();
  25. }


main.cpp
  1. #include "checkable.h"
  2. #include <QDesktopWidget>
  3. #include <QApplication>
  4. int main(int argc, char *argv[])
  5. {
  6.   QApplication app(argc, argv);
  7.   Checkable window;
  8.   window.setWindowTitle("Checkable menu");
  9.   window.show();
  10.   return app.exec();
  11. }
QQ:273247606
希望与大家一起交流QT~
离线snowdream
只看该作者 3楼 发表于: 2009-07-24
checkable.h中新增一行(红色标记字段),其他如2楼。
正常运行~






#ifndef CHECKABLE_H
#define CHECKABLE_H

#include <QMainWindow>

class Checkable : public QMainWindow
{
      Q_OBJECT
  public:
    Checkable(QWidget *parent = 0);

  private slots:
   void toggleStatusbar(bool);

  private:
   bool bFlag;
};

#endif
QQ:273247606
希望与大家一起交流QT~
离线xymail110
只看该作者 4楼 发表于: 2009-07-24
如果要使用qt的信号/槽机制,必须定义Q_OBJECT这个宏.
学无止境
快速回复
限100 字节
 
上一个 下一个