生活随笔
收集整理的這篇文章主要介紹了
文本编辑器实现复制、剪切、粘贴、撤销、重做操作
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
文章目錄
- 1 文本編輯器實現(xiàn)復制、剪切、粘貼、撤銷、重做操作
- 1.1 功能實現(xiàn)
- 1.2 界面狀態(tài)維護
1 文本編輯器實現(xiàn)復制、剪切、粘貼、撤銷、重做操作
1.1 功能實現(xiàn)
編輯器中的常規(guī)編輯交互功能:
QPlainTextEdit提供了豐富的交互功能接口:
信號與槽的連接:
我們只需要在菜單欄或者工具欄創(chuàng)建的事件進行信號與槽的綁定即可:
1.2 界面狀態(tài)維護
文本編輯器中的界面狀態(tài)需要我們手工進行維護:
- 不是任何時候都能進行復制、粘貼、撤銷、重做。
QPlainTextEdit能夠發(fā)送與界面狀態(tài)相關的信號:
實現(xiàn)步驟比較簡單:
連接界面狀態(tài)信號到自定義槽函數(shù)。
bool MainWindow
::initMainEditor()
{bool ret
= true
;mainEditor
.setParent(this
);connect(&mainEditor
, SIGNAL(textChanged()), this
, SLOT(onTextChanged()));connect(&mainEditor
, SIGNAL(copyAvailable(bool
)), this
, SLOT(onCopyAvailable(bool
)));connect(&mainEditor
, SIGNAL(redoAvailable(bool
)), this
, SLOT(onRedoAvailable(bool
)));connect(&mainEditor
, SIGNAL(undoAvailable(bool
)), this
, SLOT(onUndoAvailable(bool
)));setCentralWidget(&mainEditor
);return ret
;
}
通過文本信息找到對應的QAction對象。
QAction
* MainWindow
::findMenuBarAction(QString text
)
{QAction
* ret
= NULL;const QObjectList
& list
= menuBar()->children();for(int i
=0; i
<list
.count(); i
++){QMenu
* menu
= dynamic_cast
<QMenu
*>(list
[i
]);if( menu
!= NULL ){QList
<QAction
*> actions
= menu
->actions();for(int j
=0; j
<actions
.count(); j
++){if( actions
[j
]->text().startsWith(text
) ){ret
= actions
[j
];break;}}}}return ret
;
}QAction
* MainWindow
::findToolBarAction(QString text
)
{QAction
* ret
= NULL;const QObjectList
& list
= children();for(int i
=0; i
<list
.count(); i
++){QToolBar
* toolBar
= dynamic_cast
<QToolBar
*>(list
[i
]);if( toolBar
!= NULL ){QList
<QAction
*> actions
= toolBar
->actions();for(int j
=0; j
<actions
.count(); j
++){if( actions
[j
]->toolTip().startsWith(text
) ){ret
= actions
[j
];break;}}}}return ret
;
}
根據(jù)信號標志設置QAction對象的界面狀態(tài)。
void MainWindow
::onCopyAvailable(bool available
)
{findMenuBarAction("Copy")->setEnabled(available
);findMenuBarAction("Cut")->setEnabled(available
);findToolBarAction("Copy")->setEnabled(available
);findToolBarAction("Cut")->setEnabled(available
);
}void MainWindow
::onRedoAvailable(bool available
)
{findMenuBarAction("Redo")->setEnabled(available
);findToolBarAction("Redo")->setEnabled(available
);
}void MainWindow
::onUndoAvailable(bool available
)
{findMenuBarAction("Undo")->setEnabled(available
);findToolBarAction("Undo")->setEnabled(available
);
}
參考資料:
QT實驗分析教程
總結(jié)
以上是生活随笔為你收集整理的文本编辑器实现复制、剪切、粘贴、撤销、重做操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。