『壹』 用Qt做圖像處理,用什麼控制項顯示圖像比較方便
可以實現。 QT作為GUI庫不會提供圖像處理的庫,但會提供圖像讀取寫入介面。 建議和openCV配合使用。
『貳』 VS2017通過QT插件創建QT,GUI項目,解決方案中無GeneratedFiles過濾器該怎麼才能有
1.新建一個qt designer custom widget項目
一共會默認生成兩個類,qtdesignerwidget用與插件設計,qtdesignerwidgetplugin用與把插件繼承到 designer中
2.在qtdesignerwidget中添加自定義插件代碼
#include "QtDesignerWidget.h"
#include "QPushButton"
QtDesignerWidget::QtDesignerWidget(QWidget *parent)
: QWidget(parent)
{
QPushButton *button = new QPushButton(this);
button->setText("custom button");
}
3.用release版本進行編譯,因為要集成到qt designer中必須要用release版本
4.把上圖的dll拷貝到qt designer的plugin目錄下
5.打開qt designer就可以看到我們自定義的插件了
建立一個UI文件,可以把我們自定義的插件拖到裡面去
6.當我們要在自己的項目中使用自定義插件,需要把下圖對應的兩個文件復制到我們自己的項目中
————————————————
『叄』 怎麼在QT主窗口的一個控制項裡面畫圖
3種方法:
//方法一:直接重寫主窗口的paintEvent事件,然後用QPainter繪制即可
QRectFrectangle(10.0,20.0,60.0,60.0);
intstartAngle=0*16;
intspanAngle=360*16;
QPainterpainter(this);
painter.drawArc(rectangle,startAngle,spanAngle);
//方法二:新建一個QWidget類,重寫paintEvent方法,同樣畫圓,然後將這個類添加進來
//或者是UI的話,提升控制項即可。
//代碼同方法一
//方法三:用背景圖片進行樣式設置。
『肆』 qt4 tableWidget 怎麼給每個單元格加上時間過濾器installEventFilter分數沒用我送幾個Q幣好了
Qt的事件模型一個強大的功能是一個QObject對象能夠監視發送其他QObject對象的事件,在事件到達之前對其進行處理。
假設我們有一個CustomerInfoDialog控制項,由一些QLineEdit控制項組成。我們希望使用Space鍵得到下一個QLineEdit的輸入焦點。一個最直接的方法是繼承QLineEdit重寫keyPressEvent()函數,當點擊了Space鍵時,調用focusNextChild():
void MyLineEdit::keyPressEvent(QKeyEvent *event)
{
if (event->key() == Qt::Key_Space) {
focusNextChild();
} else {
QLineEdit::keyPressEvent(event);
}
}
這個方法有一個最大的缺點:如果我們在窗體中使用了很多不同類型的控制項(QComboBox,QSpinBox等等),我們也要繼承這些控制項,重寫它們的keyPressEvent()。一個更好的解決方法是讓CustomerInfoDialog監視其子控制項的鍵盤事件,在監視代碼處實現以上功能。這就是事件過濾的方法。實現一個事件過濾包括兩個步驟:
1. 在目標對象上調用installEventFilter(),注冊監視對象。
2. 在監視對象的eventFilter()函數中處理目標對象的事件。
注冊監視對象的位置是在CustomerInfoDialog的構造函數中:
CustomerInfoDialog::CustomerInfoDialog(QWidget *parent)
: QDialog(parent)
{
...
firstNameEdit->installEventFilter(this);
lastNameEdit->installEventFilter(this);
cityEdit->installEventFilter(this);
phoneNumberEdit->installEventFilter(this);
}
事件過濾器注冊後,發送到firstNameEdit,lastNameEdit,cityEdit,phoneNumberEdit控制項的事件首先到達CustomerInfoDialog::eventFilter()函數,然後在到達最終的目的地。
下面是eventFilter()函數的代碼:
bool CustomerInfoDialog::eventFilter(QObject *target, QEvent *event)
{
if (target == firstNameEdit || target == lastNameEdit
|| target == cityEdit || target == phoneNumberEdit) {
if (event->type() == QEvent::KeyPress) {
QKeyEvent *keyEvent = static_cast(event);
if (keyEvent->key() == Qt::Key_Space) {
focusNextChild();
return true;
}
}
}
return QDialog::eventFilter(target, event);
}
首先,我們看是目標控制項是否為QLineEdit,如果事件為鍵盤事件,把QEvent轉換為QKeyEvent,確定被敲擊的鍵。如果為Space鍵,調用focusNextChild(),把焦點交給下一個控制項,返回true通知Qt已經處理了這個事件,如果返回false,Qt將會把事件傳遞給目標控制項,把一個空格字元插入到QLineEdit中。
如果目標控制項不是QLineEdit,或者事件不是Space敲擊事件,把控制權交給基類QDialog的eventFilter()。目標控制項也可以是基類QDialog正在監視的控制項。(在Qt4.1中,QDialog沒有監視的控制項,但是Qt的其他控制項類,如QScrollArea,監視一些它們的子控制項)
Qt的事件處理有5中級別:
1. 重寫控制項的事件處理函數:如重寫keyPressEvent(),mousePressEvent()和paintEvent(),這是最常用的事件處理方法,我們已經看到過很多這樣的例子了。
2. 重寫QObject::event(),在事件到達事件處理函數時處理它。在需要改變Tab鍵的慣用法時這樣做。也可以處理那些沒有特定事件處理函數的比較少見的事件類型(例如,QEvent::HoverEnter)。我們重寫event()時,必須要調用基類的event(),由基類處理我們不需要處理的那些情況。
3. 給QObject對象安裝事件過濾器:對象用installEventFilter()後,所有達到目標控制項的事件都首先到達監視對象的eventFilter()函數。如果一個對象有多個事件過濾器,過濾器按順序激活,先到達最近安裝的監視對象,最後到達最先安裝的監視對象。
4. 給QApplication安裝事件過濾器,如果qApp(唯一的QApplication對象)安裝了事件過濾器,程序中所有對象的事件都要送到eventFilter()函數中。這個方法在調試的時候非常有用,在處理非活動狀態控制項的滑鼠事件時這個方法也很常用。
5. 繼承QApplication,重寫notify()。Qt調用QApplication::nofity()來發送事件。重寫這個函數是在其他事件過濾器處理事件前得到所有事件的唯一方法。通常事件過濾器是最有用的,因為在同一時間,可以有任意數量的事件過濾器,但是notify()函數只有一個。
許多事件類型,包括滑鼠,鍵盤事件,是能夠傳播的。如果事件在到達目標對象的途中或者由目標對象處理掉,事件處理的過程會重新開始,不同的是這時的目標對象是原目標對象的父控制項。這樣從父控制項再到父控制項,知道有控制項處理這個事件或者到達了最頂級的那個控制項。
圖7.2顯示了一個鍵盤事件在一個對話框中從子控制項到父控制項的傳播過程。當用戶敲擊一個鍵盤,時間首先發送到有焦點的控制項上(這個例子中是QCheckBox)。如果QCheckBox沒有處理這個事件,Qt把事件發送到QGroupBox中,如果仍然沒有處理,則最後發送到QDialog中。
『伍』 用Qt現有控制項實現一個功能,如圖里的紅圈,如何才能在不繼承重寫,用現有控制項和代碼來實現功能
這個有QListWidget的感覺
點擊變色或者移動變色的話,用2張圖,點擊時換圖啊。
理論上可以,具體可以試試呀(本人沒弄過這樣的,捂臉)
ps:紅字好小,眼睛要花了。。。
『陸』 qt中如何在新加的widget部件上畫直線
用事件過濾器可以實現
『柒』 qt如何過濾allWidgets返回的所有控制項
控制項初始化的時候,賦值父窗口
父窗口allWidget 就得到了
『捌』 我想在QT的控制項中實現如圖的列表,用什麼樣的控制項如何實現
QListWidget覺 點擊變色或者移變色用2張圖點擊換圖啊 理論具體試試呀(本沒弄捂臉) ps:紅字眼睛要花
『玖』 Qt設計一個控制項顯示的值可根據代碼內定義的一個變數的值改變而改變,如何編程
你可以有三種方式實現
1.在更改變數的時候發送信號,然後通過信號和槽機制實現更新
2.控制項通過定時器信號定時讀取變數的值
3.通過死循環讀取變數的值
分析,第一種方法最好。第二種方法和第三種方法類似,但是第二種好於第三種,第三種方法基本上不用