AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / 问题

All perguntas(coding)

Martin Hope
pacmaninbw
Asked: 2025-02-11 06:57:31 +0800 CST

Loop de foco infinito em QT

  • 9

insira a descrição da imagem aqui

Estou escrevendo uma ferramenta simples em Qt 6.8 C++23 para aprender sobre Qt. Ubuntu 22.04 VS Code.

Tenho 2 QLineEdit para diretório de origem e diretório de destino. Quando o usuário foca na edição de linha, a ferramenta deve abrir o QFileDialog para que ele não precise digitar o caminho completo. A edição de linha em si deve ser somente leitura.

A fonte para o diálogo contido pode ser encontrada no GitHub .

O problema é que quando a caixa de diálogo do arquivo fecha, ela reabre imediatamente porque o foco ainda está na linha de edição. Como faço para perder o foco depois que a caixa de diálogo do arquivo fecha?

#ifndef DIRECTORYLINEEDIT_H_
#define DIRECTORYLINEEDIT_H_

#include <QLineEdit>
#include <QFileDialog>
class DirectoryLineEdit : public QLineEdit {
    Q_OBJECT

public:
    explicit DirectoryLineEdit(const char* dleName, const char* title, int leWidth, QWidget *parent = nullptr)
    : QLineEdit{parent}, fileDialogTitle{title}
    {
        setObjectName(QString::fromUtf8(dleName));
        setStyleSheet("width: " + QString::number(leWidth) + "px;");
        setReadOnly(true);
    }

    void focusInEvent(QFocusEvent *event)
    {
        QString textToChange = text();
    
        textToChange = QFileDialog::getExistingDirectory(nullptr, fileDialogTitle,
            textToChange, QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
    
        setText(textToChange);    
    }
    

private:
    QString fileDialogTitle;
};

#endif // DIRECTORYLINEEDIT_H_
c++
  • 1 respostas
  • 69 Views
Martin Hope
Gregg Lind
Asked: 2025-02-11 01:36:23 +0800 CST

Expressão de filtro padrão para "corresponder a qualquer coisa"

  • 9

Que tipo de expressão polar ( pl.Expr) pode ser usada em um contexto de filtro que corresponderá a qualquer coisa, incluindo nulos?

Caso de uso: Funções auxiliares e de dicas de tipo que devem retornar um polars.Expr.

python
  • 1 respostas
  • 31 Views
Martin Hope
Jaken
Asked: 2025-02-11 01:30:08 +0800 CST

Passe um argumento opcional para uma função personalizada para uso direto e em uma construção de reticências

  • 9

Às vezes, escrevo funções que envolvem renomear/reetiquetar muitas variáveis ​​em lugares diferentes, usando um reetiquetador. O reetiquetador é usado em vários contextos, tanto diretamente no meu código (por exemplo, para títulos) quanto passado para outras funções (por exemplo, facet_wrap). Isso é bom para usos típicos:

library(ggplot2)
library(dplyr)

plotfcn <- function(df, x, y, facet, fancy_labs){
  # Strings of x & y (for axis titles)
  xStr <- fancy_labs(deparse(substitute(x)))
  yStr <- fancy_labs(deparse(substitute(y)))
  
  #base plot
  p <- ggplot(df, aes({{x}}, {{y}})) + 
    geom_point()
  
  #add facets (with labels) and axis labels
  p + facet_wrap(vars({{facet}}), labeller=fancy_labs) +
    labs(x=xStr, y=yStr)
}

mylabs <- as_labeller(c(
  'compact' = 'Small Family Car',
  'midsize' = 'Medium Family Car',
  'minivan' = 'For the Kids',
  'pickup' = 'For the Stuff',
  'displ' = 'Engine Displacement (L)',
  'hwy' = 'Highway Mileage (mpg)'))

classlist <- c('compact', 'midsize', 'minivan', 'pickup')

mpg_lim <- mpg %>% filter(class %in% classlist) 

mpg_lim %>% plotfcn(displ, hwy, class, fancy_labs = mylabs)

Agora eu gostaria de tornar o argumento labeller opcional. Envolver qualquer coisa que envolva rótulos em uma instrução if/else é fácil:

plotfcn <- function(df, x, y, facet, fancy_labs=NULL){
  # Strings of x & y (for axis titles)
  if(!is.null(fancy_labs)) {
    xStr <- fancy_labs(deparse(substitute(x)))
    yStr <- fancy_labs(deparse(substitute(y)))
  } 
  
  #base plot
  p <- ggplot(df, aes({{x}}, {{y}})) + 
    geom_point() 
  
  #optional: add labels using labeller
  if(!is.null(fancy_labs)) { 
    p + 
      facet_wrap(vars({{facet}}), labeller=fancy_labs) +
      labs(x=xStr, y=yStr)
    } else { 
      p + facet_wrap(vars({{facet}}))  
    }
}

mpg_lim %>% plotfcn(displ, hwy, class, fancy_labs = mylabs)

mpg_lim %>% plotfcn(displ, hwy, class)

No entanto, se possível, gostaria de evitar colocar o argumento facet_wrap() na instrução if/else. (No meu código real, ele já está em uma sequência if/else, então adicionar este if/else adicional adicionará muitas ramificações e copiar/colar repetidamente, o que é trabalhoso de trabalhar.) Esta resposta sugere usar uma construção ellipse para passar o argumento labeller para facet_wrap, o que funciona muito bem - exceto que não consigo descobrir como chamar a mesma função labeller para os rótulos do eixo. Eu precisaria passar o mesmo argumento no meu código duas vezes com dois nomes diferentes, como mostrado abaixo, ou há alguma maneira de chamar o argumento labeller por meio da construção ellipses e independentemente no meu código?

plotfcn <- function(df, x, y, facet, fancy_labs=NULL, ...){
  # Strings of x & y (for axis titles)
  if(!is.null(fancy_labs)) {
    xStr <- fancy_labs(deparse(substitute(x)))
    yStr <- fancy_labs(deparse(substitute(y)))
  } 
  
  #base plot - calls labeller using ...
  p <- ggplot(df, aes({{x}}, {{y}})) + 
    geom_point() +
    facet_wrap(vars({{facet}}), ...)
  
  #optional: add labels using labeller
  if(!is.null(fancy_labs)) { 
    p + labs(x=xStr, y=yStr)
    } else { 
      p
    }
}

#this works, but involves calling the same parameter (mylabs) twice under two different names, which is annoying
mpg_lim %>% plotfcn(displ, hwy, class, fancy_labs = mylabs, labeller=mylabs)
mpg_lim %>% plotfcn(displ, hwy, class)

Se eu configurar a função com um argumento labeller function(df, x, y, facet, labeller = NULL, ...), a construção ellipsis não dispara, e minhas facetas não são rotuladas. Mas se eu configurá-la apenas com as ellipses function(df, x, y, facet, ...), não posso verificar sua presença usando is.null()ou missing()para disparar minhas instruções if . Existe alguma maneira de fazer com que as instruções if reconheçam a presença/ausência do argumento labeller?

  • 1 respostas
  • 57 Views
Martin Hope
Sun Bear
Asked: 2025-02-10 18:54:27 +0800 CST

Como expressar o produto escalar de matrizes tridimensionais com numpy?

  • 9

Como faço o seguinte produto escalar em 3 dimensões com numpy?

insira a descrição da imagem aqui

Tentei:

x = np.array([[[-1, 2, -4]], [[-1, 2, -4]]])
W = np.array([[[2, -4, 3], [-3, -4, 3]], 
              [[2, -4, 3], [-3, -4, 3]]])
y = np.dot(W, x.transpose())

mas recebi esta mensagem de erro:

    y = np.dot(W, x)
ValueError: shapes (2,2,3) and (2,1,3) not aligned: 3 (dim 2) != 1 (dim 1)

Seu equivalente em 2 dimensões é:

x = np.array([-1, 2, -4])
W = np.array([[2, -4, 3],
              [-3, -4, 3]])
y = np.dot(W,x)
print(f'{y=}')

que retornará:

y=array([-22, -17])

Além disso, y = np.dot(W,x.transpose())retornará a mesma resposta.

python
  • 4 respostas
  • 100 Views
Martin Hope
realwangliqiu
Asked: 2025-02-09 17:08:29 +0800 CST

Por que os testes unitários não entram em pânico por causa de um ponteiro pendurado?

  • 9
fn dangle() {
    fn get_str<'a>(s: *const String) -> &'a str {
        unsafe { &*s }
    }
    
    let s = String::from("hello");
    let dangling = get_str(&s);
    drop(s);
    println!("Invalid str: {}", dangling);
}

#[test]
fn test() {
    dangle();  // it should panic, but does not
}

fn main() {
    dangle();  // panics
}

A main()função entra em pânico, como eu esperava. Mas por que a test()função roda com sucesso?

rust
  • 2 respostas
  • 109 Views
Martin Hope
Jaken
Asked: 2025-02-09 07:12:27 +0800 CST

Passando uma coluna de quadro de dados opcional para uma função personalizada

  • 9

Tenho uma função personalizada que recebe como entrada um quadro de dados e, em seguida, uma seleção de colunas desse quadro de dados, assim:

library(dplyr)
df <- data.frame(x = c(1, 2, 3, 4, 5), y = c(11, 12, 13, 14, 15))

sample_fun <- function(df, x, y) {
  df <- df %>% 
    mutate(z = {{x}} * {{y}})
  }

df_out <- sample_fun(df, x, y)

Gostaria de tornar uma das colunas do data frame opcional e, então, fazer a função testar sua presença usando !if.null(). Se isso fosse um objeto, em vez de uma coluna do data frame, eu faria isso:

sample_fun <- function(df, x, y = NULL) {
  if(!is.null(y)) {
    df <- df %>% 
      mutate(z = {{x}} * y)
  }
  else(df <- df %>%
         mutate(z = {{x}}))
}

df_out <- sample_fun(df, x) 
df_out2 <- sample_fun(df, x, y)

No entanto, não consigo descobrir como verificar a presença da coluna de dados. Ambos if(!is.null(y))e if(!is.null({{y}}))retornam Error: object 'y' not found. Qual é a melhor maneira de verificar a presença de y, quando y é uma coluna de data frame em vez de um objeto independente?

  • 3 respostas
  • 79 Views
Martin Hope
JohnA
Asked: 2025-02-08 07:38:45 +0800 CST

Por que não recebo um pop-up MessageBox ao chamar MessageBoxA

  • 9

Então, estou aprendendo C depois de anos de C# e imaginei que um bom projeto inicial seria algo um pouco mais simples.

Estou tentando invocar uma MessageBox em um aplicativo WPF em branco e parece que tudo funcionaria, mas por algum motivo não estou obtendo uma MessageBox.

Tanto o WpfApp quanto o aplicativo que criei são compilados em versões x64, então não vejo por que haveria problemas de arquitetura.

A saída de depuração também parece boa.

Tentei executar ambos os aplicativos com privilégios de administrador. Tentei invocar em diferentes aplicativos, como o Notepad (versão de 32 e 64 bits), assim como a Calculadora.

Process ID for WpfApp1.exe found: 948
Target process found. PID: 948
Opened handle to process.
Handle to user32.dll loaded successfully.
Address of MessageBoxA: 00007ffc67fc8b70
Allocated memory at remote address: 00000262a8500000
Successfully wrote message to remote memory.
Remote thread created successfully.
Remote thread completed.

Mas acho que há algo errado aqui?

#include <stdio.h>
#include <windows.h>
#include <tlhelp32.h>
#include <unistd.h>

DWORD GetPID(const char *processName);

int main(void) {
    DWORD processId = GetPID("WpfApp1.exe");

    if (!processId) {
        printf("Process not found\n");
        fflush(stdout);
        return 1;
    }
    printf("Target process found. PID: %lu\n", processId);
    fflush(stdout);

    HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processId);
    if (!hProcess) {
        printf("Failed to open process. Error code: %lu\n", GetLastError());
        fflush(stdout);
        return 1;
    }
    printf("Opened handle to process.\n");
    fflush(stdout);

    // Explicitly load user32.dll
    HMODULE hUser32 = LoadLibrary("user32.dll");
    if (!hUser32) {
        printf("Failed to load user32.dll. Error code: %lu\n", GetLastError());
        fflush(stdout);
        CloseHandle(hProcess);
        return 1;
    }
    printf("Handle to user32.dll loaded successfully.\n");
    fflush(stdout);

    LPVOID msgBoxAddress = (LPVOID)GetProcAddress(hUser32, "MessageBoxA");
    if (!msgBoxAddress) {
        printf("Failed to find address of MessageBoxA. Error code: %lu\n", GetLastError());
        fflush(stdout);
        FreeLibrary(hUser32);
        CloseHandle(hProcess);
        return 1;
    }
    printf("Address of MessageBoxA: %p\n", msgBoxAddress);
    fflush(stdout);

    LPVOID remoteString = VirtualAllocEx(hProcess, NULL, 256, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
    if (!remoteString) {
        printf("Failed to allocate memory in target process. Error code: %lu\n", GetLastError());
        fflush(stdout);
        FreeLibrary(hUser32);
        CloseHandle(hProcess);
        return 1;
    }
    printf("Allocated memory at remote address: %p\n", remoteString);
    fflush(stdout);

    if (!WriteProcessMemory(hProcess, remoteString, "Hello World!", 13, NULL)) {
        printf("Failed to write to remote memory. Error code: %lu\n", GetLastError());
        fflush(stdout);
        VirtualFreeEx(hProcess, remoteString, 0, MEM_RELEASE);
        FreeLibrary(hUser32);
        CloseHandle(hProcess);
        return 1;
    }
    printf("Successfully wrote message to remote memory.\n");
    fflush(stdout);

    HANDLE hThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)msgBoxAddress, remoteString, 0, NULL);
    if (!hThread) {
        printf("Failed to create remote thread. Error code: %lu\n", GetLastError());
        fflush(stdout);
        VirtualFreeEx(hProcess, remoteString, 0, MEM_RELEASE);
        FreeLibrary(hUser32);
        CloseHandle(hProcess);
        return 1;
    }
    printf("Remote thread created successfully.\n");
    fflush(stdout);

    WaitForSingleObject(hThread, INFINITE);
    printf("Remote thread completed.\n");
    fflush(stdout);

    VirtualFreeEx(hProcess, remoteString, 0, MEM_RELEASE);
    FreeLibrary(hUser32);
    CloseHandle(hThread);
    CloseHandle(hProcess);
    return 0;
}

DWORD GetPID(const char *processName) {
    PROCESSENTRY32 processEntry;
    HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

    if (hSnapshot == INVALID_HANDLE_VALUE) {
        printf("Failed to create snapshot. Error code: %lu\n", GetLastError());
        fflush(stdout);
        return 0;
    }

    processEntry.dwSize = sizeof(processEntry);
    if (Process32First(hSnapshot, &processEntry)) {
        do {
            if (strcmp(processEntry.szExeFile, processName) == 0) {
                DWORD pid = processEntry.th32ProcessID;
                CloseHandle(hSnapshot);
                printf("Process ID for %s found: %lu\n", processName, pid);
                fflush(stdout);
                return pid;
            }
        } while (Process32Next(hSnapshot, &processEntry));
    }

    printf("Failed to find process: %s\n", processName);
    fflush(stdout);
    CloseHandle(hSnapshot);
    return 0;
}

Isso também parece bastante código comparado a vários artigos que li online.

c
  • 2 respostas
  • 101 Views
Martin Hope
Dmitriano
Asked: 2025-02-08 02:05:21 +0800 CST

Atribuindo um valor a um membro da classe const

  • 9

Há UB no código abaixo?

#include <iostream>

int* p_n;

class A
{
public:

    A(int val) : n(val)
    {
        // At this point the compiler does not know if the object is const or not.
        p_n = &n;
    }

    int n;
};

int main()
{
    // A::n is const, because A is const, right?
    const A a(1);

    // but we change a const value here
    *p_n = 2;

    std::cout << a.n << std::endl;

    return 0;
}

Existe alguma diferença entre atribuir *p_ne fazer isso?

const_cast<A&>(a).n = 2;

EDITAR

Daqui :​

const e semântica volátil (7.1.6.1) não são aplicadas em um objeto em construção. Elas entram em vigor quando o construtor para o objeto mais derivado (1.8) termina.

Enquanto o objeto aestá em construção, ele não é conste a.nnão é const, mas eles se tornam constquando o construtor termina.

Então, p_naponta para o constobjeto ou não?

c++
  • 1 respostas
  • 125 Views
Martin Hope
NullPointerException
Asked: 2025-02-07 16:21:06 +0800 CST

Como evitar recomposições desnecessárias devido à verificação de uma variável de estado?

  • 9

Estou adicionando muitos marcadores em um mapa do Google no Jetpack Compose, e funciona, mas preciso pintá-los apenas quando o nível de zoom estiver acima de 15, então adicionei if (cameraPositionState.position.zoom > 15)antes de adicionar os marcadores. Também funciona, mas funciona muito lento porque cada vez que movo a posição da câmera com o dedo, o mapa recompõe tudo e adiciona novamente todos os marcadores.

Como posso evitar essa recomposição toda vez que a câmera for movida?

Se eu remover isso, if (cameraPositionState.position.zoom > 15)as recomposições desaparecem e o mapa fica suave novamente, mas preciso dessa verificação para evitar pintar os criadores se o nível de zoom estiver acima de 15.

Como resolver isso?

val cameraPositionState = rememberCameraPositionState {
    position = CameraPosition.fromLatLngZoom(city, 13f)
}

GoogleMap(modifier = Modifier.fillMaxSize(), cameraPositionState = cameraPositionState) {
    if (cameraPositionState.position.zoom > 15) { // THIS LINE IS THE ISSUE
        val bitmapDescriptor = BitmapDescriptorFactory.fromResource(R.drawable.ic_bus_mini)
        for (busStop in uiState.data) {
            Marker(
                state = rememberMarkerState(position = LatLng(busStop.lat, busStop.lon)),
                title = busStop.name, icon = bitmapDescriptor,
            )
        }
    }
}

Tentei uma solução usando derivedstateof:

val showMarkers by remember(cameraPositionState.position.zoom) {
    derivedStateOf {
        cameraPositionState.position.zoom > 15
    }
}

e mudando o if por if (showMarkers) {mas o problema persiste, movendo a câmera, faz tudo recompor adicionando todos os marcadores novamente e atrasando o mapa

  • 1 respostas
  • 43 Views
Martin Hope
Arjonais
Asked: 2025-02-07 15:19:08 +0800 CST

Como verificar se o parâmetro do modelo é um contêiner de comprimento fixo usando o conceito?

  • 9

Gostaria de ter um conceito que verifica se um tipo é um contêiner de comprimento fixo. O tipo pode ser um array estilo C, um std::array, a std::spanou um contêiner personalizado. Posso verificar a condição do contêiner conforme mostrado no código abaixo, mas não consigo fazer com que ele verifique a condição de comprimento.

template <typename T, size_t N>
concept fixed_container =
   requires (T const& t)
   {
       {std::size(t)} -> std::same_as<size_t>;
       {std::begin(t)};
       {std::end(t)};
   }
   // && std::declval<T>().size() == N // Error: 'declval() must not be used!'
   // && T::size() == N // Error: 'call to non-static member function without an object argument'
   ;

// These should all be correct
static_assert( fixed_container<std::array<double, 3>, 3>);
static_assert(!fixed_container<std::array<double, 3>, 4>);
static_assert( fixed_container<std::span<double, 3>,  3>);
static_assert(!fixed_container<std::span<double, 3>,  4>);
static_assert( fixed_container<double[3],             3>);
static_assert(!fixed_container<double[3],             4>);

Alguma ideia?

EDIT: O bloco

   requires (T const& t)
   {
       {std::size(t)} -> std::same_as<size_t>;
       {std::begin(t)};
       {std::end(t)};
   }

pode ser substituído por uma única linha

   std::ranges::sized_range<T>
c++
  • 1 respostas
  • 95 Views
Prev
Próximo

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Reformatar números, inserindo separadores em posições fixas

    • 6 respostas
  • Marko Smith

    Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não?

    • 2 respostas
  • Marko Smith

    Problema com extensão desinstalada automaticamente do VScode (tema Material)

    • 2 respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Martin Hope
    Fantastic Mr Fox Somente o tipo copiável não é aceito na implementação std::vector do MSVC 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant Encontre o próximo dia da semana usando o cronógrafo 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor O inicializador de membro do construtor pode incluir a inicialização de outro membro? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul O C++20 mudou para permitir a conversão de `type(&)[N]` de matriz de limites conhecidos para `type(&)[]` de matriz de limites desconhecidos? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann Como/por que {2,3,10} e {x,3,10} com x=2 são ordenados de forma diferente? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve