Qt中,如何讓QTextEdit不響應(yīng)tab事件?
例如有兩個(gè)QTextEdit控件,現(xiàn)在焦點(diǎn)在其中一個(gè)控件上,按下tab,既不會(huì)切換控件焦點(diǎn),同時(shí)也不會(huì)移動(dòng)4位。最暴力的方法就是繼承QTextEdit,重寫事件
void QWidget::keyPressEvent ( QKeyEvent * event )
{
if(event->key == Qt::Key_Tab)
{
return;
}
else
__supper::keyPressEvent (event);
}
如何讓qtextedit動(dòng)態(tài)加載內(nèi)容
因?yàn)橐獙?duì)一段字符串進(jìn)行多次處理,為了避免多次刷新UI帶來的負(fù)擔(dān),肯定是先將數(shù)據(jù)讀入內(nèi)存,進(jìn)行處理,然后一次性更新UI。
所以先調(diào)用QTextEdit的toPlainText將文本存入一個(gè)QString里。然后就有多種方法了。如果必須考慮行號(hào)的話,可以調(diào)用QString的split,將數(shù)據(jù)存入一個(gè)QStringList里,這樣就可以得到一個(gè)QString的鏈表,每個(gè)節(jié)點(diǎn)一行,可以快速定位到任意一行。最后處理完是可以調(diào)用QStringList的join生產(chǎn)一個(gè)QString,再調(diào)用QTextEdit的setPlainText存入文本框。
qt中如何向QTextEdit發(fā)送一個(gè)鼠標(biāo)滾輪向下滾動(dòng)一下的事件?
發(fā)送按鍵按下事件可以用以下代碼:rnQKeyEvent key(QEvent::KeyPress,Qt::Key_A,Qt::NoModifier);rnQCoreApplication::sendEvent(TextEdit,&key);rnrn那么發(fā)送滾輪滾動(dòng)事件是不是應(yīng)該是下面的樣子?rnQWheelEvent wheel(……);rnQCoreApplication::sendEvent(TextEdit,&wheel);rn如果是的話括號(hào)里應(yīng)該怎么寫呀?如果不是的話又該怎么實(shí)現(xiàn)?rnrn或者可以告訴我如何通過代碼控制QTextEdit使它的內(nèi)容上下滾動(dòng)(注意不是上下移動(dòng)光標(biāo))?你的目的是用代碼模擬一個(gè)滾輪事件,需要知道此時(shí)此刻的滾輪和鍵盤、鼠標(biāo)等狀態(tài),并且填充到參數(shù)列表里面,具體可以參看qt的幫助說明。我這里有個(gè)例子,可以模擬滾輪在獲得焦點(diǎn)的控件上發(fā)出一個(gè)向下滾輪的事件:
QWidget *current_focus_widget;
current_focus_widget = QApplication::focusWidget();//獲得當(dāng)前焦點(diǎn)的控件
QWheelEvent urWheelEvent(QPoint(current_focus_widget->pos().x(),
current_focus_widget->pos().y()), 8, Qt::NoButton, Qt::NoModifier,
Qt::Vertical);//模擬滾輪,這里要填充比較多的參數(shù)
QCoreApplication::sendEvent(this,&urWheelEvent);
void QTextEdit::wheelEvent(QWheelEvent * e)
?
qt qtextedit 怎樣刪除光標(biāo)前一個(gè)字符
下面只是給出一段演示代碼,你需要根據(jù)實(shí)際情況進(jìn)行修改
QTextEdit editer;
editer.setText("abcdef");
//獲取當(dāng)前文本光標(biāo)
QTextCursor cursor = editer.textCursor();
//將光標(biāo)移動(dòng)到文本結(jié)尾,便于刪除字符測(cè)試,實(shí)際上并不需要該步驟
cursor.movePosition(QTextCursor::End);
//判斷當(dāng)前是否選中了文本,如果選中了文本則取消選中的文本,再刪除前一個(gè)字符
if(cursor.hasSelection())
cursor.clearSelection();
//刪除前一個(gè)字符
cursor.deletePreviousChar();
//設(shè)置當(dāng)前的光標(biāo)為更改后的光標(biāo)
editer.setTextCursor(cursor);
editer.show();
鼠標(biāo)點(diǎn)至要?jiǎng)h除的字符后面,然后點(diǎn)Backspace!謝謝!
Qt有接收輸入法字符串的事件么,keyPressEvent行不
this->setAttribute(Qt::WA_KeyCompression, true);
可是用輸入法輸入中文后,keyPressEvent進(jìn)不去
QLineEdit有textChange 信號(hào),關(guān)聯(lián)這個(gè)信號(hào),在槽里面可以接受到字符。
沒有QLineEdit啊
不用打字啊,字符串用作他用
不用控件輸入啊,我只是想獲得輸入的字符串,不過用你的方法,是不是可以搞一個(gè)隱藏的QLineEdit讓他獲得焦點(diǎn),不過左右方向鍵應(yīng)該會(huì)有影響吧
又或者我接收到輸入法的字符串,傳遞給其他窗體;
或者做一個(gè)打字練習(xí)程序,本來Label里有一些字,打出來的字對(duì)比后一樣的話就改變那個(gè)字的顏色。。。
打字的過程自己實(shí)現(xiàn),你要實(shí)現(xiàn)輸入法?為什么不直接用QTextEdit呢,你的要求用QTextEdit好像全部能實(shí)現(xiàn)吧,接收輸入法的字符串, QTextEdit有textChage信號(hào),打字練習(xí),你只要拿label上的字和textEdit上字符進(jìn)行比較,改變下字體顏色,對(duì)的用黑色顯示,錯(cuò)的是紅色顯示,這是可以實(shí)現(xiàn)的,你就是想插入圖片,在輸入字,在插入圖片,textEdit多可以實(shí)現(xiàn)。
相關(guān)推薦:
非法融資的有那些(非法融資的類型)
規(guī)范立案登記(受案和立案登記制度)
公司上市要具備什么(公司上市需要滿足的條件有哪些)
關(guān)于企業(yè)倒閉的原因(破產(chǎn)原因有)
有家庭暴力怎么判離婚(男的家暴女的離婚怎么判)