Cpper
C/C++高级工程师 Android高级软件工程师 IT集成工程师 音频工程师 熟悉c,c++,java,c#,py,js,asp等多种语言 程序猿
这是第9篇学习QT的例子
本文主要学习自带的Dock Widget例子
这个例子主要包含以下QT控件
1.Dock
2.Menu
3.ToolBar

1.看看例子还是说QMainWindow吧
什么是
QMainWindow?
A main window provides a framework for building an application's user interface. Qt has QMainWindow and its related classes for main window management. QMainWindow has its own layout to which you can add QToolBars, QDockWidgets, QDockBars,QDockWidgets, a QStatusBar.

总而言之:QMainWindow提供构建应用程序接口的框架。QMainWindow提供独有的布局结构以便于用户加入QToolBar,QDockWidgets,QDockBars和QStatusBar.

2.使用自定义对象从QT对象继承的方法
除了必要的 :public QTObject
还要加入宏Q_OBJECT
如果必要加入槽,信号函数
一个例子是:
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow();

private slots:
    
void newLetter();
    
void save();
    
void print();
    
void undo();
    
void about();
    
void insertCustomer(const QString &customer);
    
void addParagraph(const QString &paragraph);
3.状态栏
设置状态栏信息的函数
例子:
statusBar()->showMessage(tr("Ready"));
4.文件打开和保存对话框
QString fileName = QFileDialog::getSaveFileName(this,
                        tr(
"Choose a file name"), ".",
                        tr(
"HTML (*.html *.htm)"));
5.再说下QAction
    newLetterAct = new QAction(QIcon(":/images/new.png"), tr("&New Letter"),
                               
this);
    newLetterAct
->setShortcuts(QKeySequence::New);
    newLetterAct
->setStatusTip(tr("Create a new form letter"));
    connect(newLetterAct, SIGNAL(triggered()), 
this, SLOT(newLetter()));
通过调用setStatusTip可以设置action提示信息
6.QTextDocument对象
原文解释:
The QTextDocument class holds formatted text that can be viewed and edited using a QTextEdit.
通过QTextEdit的document可以获取QTextDocument对象
假定需要响应文档撤销事件
一个可能的例子就是:
void MainWindow::undo()
{
    QTextDocument 
*document = textEdit->document();
    document
->undo();
}
7.
QTextCursor
The QTextCursor class offers an API to accDuess and modify QTextDocuments.
我们就可以得出QTextCursor访问和修改QTextDocument,QTextDocumnt显示QTextEdit内容文本。
8.QDockWidget
The QDockWidget class provides a widget that can be docked inside a QMainWindow floated as a top-level window on the desktop.
关于Dock的用法如下:
设置Dock为左右结构
dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
设置Dock内容控件
dock->setWidget(customerList);
把这个dock放在窗体右边
addDockWidget(Qt::RightDockWidgetArea, dock);
9.这个例子还有其他的对象比如
QListWidget以后再看吧

不过这一篇感觉有几个疑惑的地方
比如:
    QDockWidget *dock = new QDockWidget(tr("Customers"), this);
    dock
->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
    customerList 
= new QListWidget(dock);
    customerList
->addItems(QStringList()
            
<< "John Doe, Harmony Enterprises, 12 Lakeside, Ambleton"
            
<< "Jane Doe, Memorabilia, 23 Watersedge, Beaton"
            
<< "Tammy Shea, Tiblanka, 38 Sea Views, Carlton"
            
<< "Tim Sheen, Caraba Gifts, 48 Ocean Way, Deal"
            
<< "Sol Harvey, Chicos Coffee, 53 New Springs, Eccleston"
            
<< "Sally Hobart, Tiroli Tea, 67 Long River, Fedula");
    dock
->setWidget(customerList);
    addDockWidget(Qt::RightDockWidgetArea, dock);
    viewMenu
->addAction(dock->toggleViewAction());

    dock 
= new QDockWidget(tr("Paragraphs"), this);
其中的dock new了2次并没有调用相应的delete.
不知道QT具体是如何实现的
另外在QT的例子中在程序结束的时候并没有销毁new出来的指针
不知道QT有内在机制保证内存不会泄露还是?
posted on 2011-03-18 23:30 ccsdu2009 阅读(5374) 评论(2)  编辑 收藏 引用 所属分类: QT编程
Comments
  • # re: QT学习笔记-9.Dock Widget例子学习
    逐渐
    Posted @ 2011-03-23 18:04
    把程序运行结果截个图贴上会更好些....  回复  更多评论   
  • # re: QT学习笔记-9.Dock Widget例子学习
    Tanky Woo
    Posted @ 2011-03-27 10:27
    貌似按照《C++ GUI With Qt 4》所说,对于这种小程序,delete无关紧要,而且MainWindow是DockWidget的父窗体,所以在MainWindow销毁时,DockWidget也会销毁的。  回复  更多评论   

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理