摘要:
现在我们的按钮还不支持复制,粘贴这些操作,那我们接下来做这些事情。首先我们将剪切和复制两个按钮设置成不可见cutAct->setEnabled(false); copyAct->setEnabled(false);然后加上两个连接connect(textEdit, SIGNAL(copyAvailable(bool)), cutAct,SLOT(setEnabled(bool))); connect(textEdit, SIGNAL(copyAvailable(bool)), copyAct, SLOT(setEnabled(bool)));这两个什么意思呢,当我们用鼠标选择了一段 阅读全文
摘要:
菜单栏有了,工具栏也有了,连用户可以输入的编辑框也有了,接下来当然是给我们这些按钮添加动作,以完成一个记事本的功能。1.打开文件首先我们在类中定义一个槽,还记得槽是怎么声明的吗,就是在private slots:下声明一个函数。private slots: void loadFile();然后我们在mainwindow.cpp中实现这个函数,其中我们要用到一个变量,mFileName表示当前文本文件的名字,这里定义成QString类型,还是要在类中定义这个变量。QString mFileName;void MainWindow::loadFile(){ QString fileName = . 阅读全文
摘要:
如何给工具栏上按钮添加图标在Qt Creator中新建一个Qt Resource file在Add下拉菜单中选择Add Prefix,表示添加一个前缀,这里我们将默认的/new/prefix修改为/,然后在Add下拉菜单中选择Add File,表示将图片添加进来,我们可以在工程目录下新建一个目录,比如images,专门用于存放图片。我们在创建QAction的同时就为这个action添加一个图标,例如newAct = new QAction(tr("new"), this);newAct->setIcon(QIcon(":/images/new.png&quo 阅读全文
摘要:
1.添加菜单栏我们MainWindow类中添加如下成员QMenu *fileMenu;QAction *newAct;QAction *openAct;QAction *saveAct;其中QMenu代表一个菜单,QAction代表菜单中的一个选项,在头文件里还要增加这两个类的前置声明class QMenu;class Qaction;接下来在声明两个私有函数,一个用于我们创建菜单,一个用于创建菜单中的选项。void createActions();void createMenus();然后在mainwindow.cpp中实现这两个方法void MainWindow::createAction 阅读全文
摘要:
在上一个例子中我们创建了一个非常简单的QMainWindow,接下来我们以实际例子来一步一步(stepby step)的写一个类似于记事本的程序,我们就叫它textedit。首先我们在mainwindow.h中新建一个类MainWindow继承QMainWindow,里面只有一个构造函数MainWindow()。/*mainwindow.h*/#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>class MainWindow : public QMainWindow{ Q_OBJECTpublic: Main 阅读全文
摘要:
什么是QMainWindow?QmainWindow类继承QWidget类,它是QT提供的一个主应用程序窗口类,它包含菜单栏(MenuBar),工具栏(ToolBar),状态栏(StatusBar)以及提供给用户的工作空间(CentralWidget)等。例子#include <QApplication>#include <QMainWindow>#include <QLabel>int main(int argc, char *argv[]){ QApplication app(argc, argv); QMainWindow window; QLabel 阅读全文
摘要:
在《发现live555中一个小bug》一文中所修改的代码并不起作用。经测试,RTPSource的Socket检测不到网络出错的情况。而RTCPInstance中的socket可以检测到,所以可以利用RTCPInstance通知RTPSource应停止流传输了。修改如下(//---------------------包含的代码为修改处):void RTCPInstance::incomingReportHandler1()
{ do { int tcpReadStreamSocketNum = fRTCPInterface.nextTCPReadStreamSocketNum(); u... 阅读全文
摘要:
今天忽然发现了live555中的openRTSP.exe中的一个小问题。在openRTSP.exe连上服务器后,如果服务器退出而没有发送TEARDOWN,openRTSP.exe不会退出,即使收不到数据,它也会一直等待下去。当然,这也可以不认为是一个bug,因为服务器不辞而别也不对。究其原因,主要是openRTSP.exe中所使用的RTPSource类没有对网络出错进行处理,所以尽管网络出错,收不到数据,接收数据的循环会一直进行下去。从这个解度讲也算是个bug吧。要改正很容易,下面用//---------------标注者即是改正处:void MultiFramedRTPSource::net 阅读全文
摘要:
在QT编程中,如果遇到多个控件,但是他们的槽大致相同,这个该怎么处理,比如10个button,难道要写10个槽,可以不必这样,QSignalMapper可以帮组我们解决。 QSignalMapper *signalMapper = new QSignalMapper(this); for (i = 0; i < 10; i++) { button = new QPushButton(QObject::tr(buttonName)); signalMapper->set 阅读全文
摘要:
信号和槽是QT的核心,在其他GUI中大多采用消息和回调函数,比如win32中#include <QApplication>#include <QPushButton>int main(int argc, char *argv[]){ QApplication app(argc, argv); QPushButton button("Quit"); button.show(); QObject::connect(&button, SIGNAL(clicked()), &app, SLOT(quit())); return app.exe 阅读全文